namespace AnalyStock.DataAnalysis;

public static class CommCNSpell
{
    /// <summary>
    ///     在指定的字符串列表CnStr中检索符合拼音索引字符串
    /// </summary>
    /// <param name="cnStr">汉字字符串</param>
    /// <returns>相对应的汉语拼音首字母串</returns>
    public static string GetChineseSpell(string cnStr)
    {
        var strTemp = string.Empty;
        cnStr = cnStr.Replace(" ", string.Empty); //剔除汉字中间的空格
        var iLen = cnStr.Length;
        for (var i = 0; i < iLen; i++)
        {
            strTemp += GetFirstChineseLetter(cnStr.Substring(i, 1));
        }

        return strTemp + strTemp.ToLower();
    }

    /// <summary>
    ///     得到一个汉字的拼音第一个字母，如果是一个英文字母则直接返回大写字母
    /// </summary>
    /// <param name="CnChar">单个汉字</param>
    /// <returns>单个大写字母</returns>
    private static string GetFirstChineseLetter(string cnChar)
    {
        //英文字母
        if (Encoding.Default.GetBytes(cnChar).Length == 1)
        {
            return cnChar.ToUpper();
        }

        var chineseTable = new Dictionary<string, string>
        {
            { "芭", "A" }, { "擦", "B" }, { "搭", "C" }, { "蛾", "D" }, { "发", "E" },
            { "噶", "F" }, { "哈", "G" }, { "击", "H" }, { "喀", "J" }, { "垃", "K" },
            { "妈", "L" }, { "嗯", "M" }, { "哦", "N" }, { "啪", "O" }, { "期", "P" },
            { "然", "Q" }, { "撒", "R" }, { "塌", "S" }, { "挖", "T" }, { "误", "W" },
            { "压", "X" }, { "匝", "Y" }, { "祚", "Z" }
        };
        foreach (var item in chineseTable)
        {
            if (cnChar.CompareTo(item.Key) < 0)
            {
                return item.Value;
            }
        }
        return "?";
    }
}